package com.example.demo.Config; // 或者你喜欢的包，例如 com.example.demo.config

import org.springframework.security.crypto.password.PasswordEncoder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 一个用于明文密码比较的 PasswordEncoder 实现。
 * 警告：仅用于特殊情况，例如题目要求的管理员明文密码。
 * 在生产环境中，所有密码都应该被安全地哈希存储。
 */
public class PlainTextPasswordEncoder implements PasswordEncoder {

    private static final Logger log = LoggerFactory.getLogger(PlainTextPasswordEncoder.class);

    @Override
    public String encode(CharSequence rawPassword) {
        // 对于明文存储，encode 方法理论上应该直接返回原始密码
        // 或者抛出不支持操作的异常，因为我们不打算“编码”明文
        if (rawPassword == null) {
            return null;
        }
        log.warn("PlainTextPasswordEncoder: 'encode' method called. Storing password as plain text. THIS IS NOT SECURE FOR PRODUCTION.");
        return rawPassword.toString();
    }

    @Override
    public boolean matches(CharSequence rawPassword, String encodedPassword) {
        // rawPassword 是用户输入的密码
        // encodedPassword 是从数据库中获取的密码（在此场景下是明文）
        if (rawPassword == null && encodedPassword == null) {
            return true;
        }
        if (rawPassword == null || encodedPassword == null) {
            return false;
        }
        // 执行明文比较
        boolean match = rawPassword.toString().equals(encodedPassword);
        if (!match) {
            log.debug("PlainTextPasswordEncoder: Password mismatch. Raw: [PROTECTED], Stored: [PROTECTED]");
        } else {
            log.debug("PlainTextPasswordEncoder: Password matched successfully.");
        }
        return match;
    }
}
